home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d2 / shell35.arc / SHELL.DOC < prev   
Text File  |  1986-10-02  |  53KB  |  1,254 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.                PC-SHELL (1)             PC-DOS C Shell              PC-SHELL (1)
  68.  
  69.  
  70.           NAME              NAME  
  71.  
  72.                pc-shell - pc command processor 
  73.  
  74.           SYNOPSIS              SYNOPSIS  
  75.  
  76.                pc shell                                                  pc-shell  [-s] [-v] [-b] [arg1 ... argn] 
  77.  
  78.           DESCRIPTION              DESCRIPTION  
  79.  
  80.                pc-shell is a command processor for IBM-PC's and compatibles that 
  81.                emulates  some  of  the  more desirable functions of the Berkeley
  82.                UNIX* C-shell. In addition, it implements PC-DOS versions of some 
  83.                of the common UNIX* commands  -ls, mv, cp, etc.  
  84.  
  85.                     v                                                                            The -v option (verbose) causes the program to echo  all  commands
  86.                to the standard error stream before executing them.  
  87.  
  88.                      b                                                                           The  -b  option  suppresses mapping of the backslash character to
  89.                the forward slash character in all  operations  that  communicate
  90.                with [PC|MS]DOS.    This is here primarily for compatibility with
  91.                PC-NET,  which  seems  to  choke  on  paths  containing   forward
  92.                slashes.  
  93.  
  94.                arg1       argn                                                                   arg1  ...  argn  (the  command  line  arguments) are put into the
  95.                shell's environment as the variables $1 through $n.  
  96.  
  97.  
  98.           Wild Card Substitution              Wild Card Substitution  
  99.  
  100.                Ambiguous file names are expanded to  a  list  of  matching  file
  101.                names on  the command line.  This can be defeated by quoting, and
  102.                by setting the NOGLOB environment variable to '1'.  
  103.  
  104.                Command lines passed to external programs are  truncated  to  128
  105.                characters.  
  106.  
  107.  
  108.           History Substitution              History Substitution  
  109.  
  110.  
  111.                History substitution is a powerful means to save retyping of long 
  112.                command lines.It allows you to do things like re-execute the last 
  113.                command,    re-execute  the last command but redirect output to a
  114.                file, or execute a  new  command  with  arguments  from  previous
  115.                command  lines.    The  last  20  commands  are saved, and can be
  116.                reviewed by typing the 'history' command.  
  117.  
  118.                Previous commands can be referred to by their number, or relative 
  119.                to the  current  command's  number.    Parameters  from  previous
  120.                commands can be seperated out and used individually.  
  121.  
  122.                History  substitutions  specifications  come  in  two parts - the
  123.                command number  specifier and the argument  specifier,  seperated
  124.                by a  colon.    The  argument    specifier  is optional; if it is
  125.                omitted, the entire command line is specified.  
  126.  
  127.                <command specifier> ::= !! | !n | !-n | <shortcut> 
  128.  
  129.  
  130.                                               -1-
  131.  
  132.  
  133.                PC-SHELL (1)             PC-DOS C Shell              PC-SHELL (1)
  134.  
  135.  
  136.                !!  = last command
  137.                !n  = nth command
  138.                !-n = command n commands before current command number
  139.                !#  = the current command line
  140.  
  141.                <arg specifier> ::= :[^$*] | [^$*] | :n | :n* | <searchstr> | <empty>
  142.                n   = number of argument (0 being the command name)
  143.                ^   = first argument (i.e. argv[1])
  144.                $   = last argument
  145.                *   = ^-$, or nothing if only one word on command line
  146.                n*  = arguments n through $
  147.  
  148.                <searchstr> ::= (initial characters of a previous command)
  149.  
  150.                <history subst specification> ::= <command specifier><arg specifier>
  151.  
  152.                This is not as complicatated as  it  may  appear.    Here  is  an
  153.                example session.  
  154.  
  155.                EXAMPLE 
  156.  
  157.                0% ls *.c
  158.                *.c
  159.                foo.c bar.c
  160.                1% more foo.c
  161.                /* edit the last argument of the last command */
  162.                2% edit !!:$            
  163.                /* go off and edit */
  164.                /* reference last argument of last command */
  165.                3% fgrep foo !!:$ bar.c 
  166.                FOO.C : foo
  167.                BAR.C : foo
  168.                /* edit the second thru the last args of command 3 */
  169.                4% edit !3:2*            
  170.                (go off and edit)
  171.                /* repeat last command */
  172.                %5 !!
  173.                (go off and edit)
  174.                /* remove the 1st argument of the command 2 before the current one */
  175.                %6 rm !-6:^
  176.  
  177.  
  178.                Several  shortcut  expressions  (that  don't  fit into the formal
  179.                description above) are also allowed.  !$, !^,  !*  are  allowable
  180.                synonyms for !!:$, !!:^, and !!:*.  It is also possible to select 
  181.                a previous command with one or more characters from the beginning 
  182.                of that command line.  
  183.  
  184.                     %1 edit foo.c    # edit a source file
  185.                     %2 cc foo.c        # try and compile it
  186.                     %3 !e            # repeat command #1
  187.  
  188.                History substitution here is a compatible subset of the [U|XE]NIX 
  189.                C shell    history  substitution  facility.    Cshell allows even
  190.                weirder combinations.  
  191.  
  192.  
  193.           Variable Substitution              Variable Substitution  
  194.  
  195.  
  196.                                               -2-
  197.  
  198.  
  199.                PC-SHELL (1)             PC-DOS C Shell              PC-SHELL (1)
  200.  
  201.  
  202.                Shell variables are synonymous for our purposes with  environment
  203.                strings, i.e.  they are defined with the 'set' command.  
  204.  
  205.                Variables  are  referenced  on  the  command  line by prefacing a
  206.                variable name by a dollar sign.    Two  dollar  signs  in  a  row
  207.                signify a dollar sign character.  
  208.  
  209.                As  mentioned  above, command line arguments are contained in the
  210.                                                      n                                            shell variables, $1 through $n, where n is the number of the last 
  211.                argument.  
  212.  
  213.                EXAMPLE
  214.  
  215.                %0 set home = c:/
  216.                %1 echo $home
  217.                C:/
  218.                %2 ls $home
  219.                C:/*.*
  220.                command.com
  221.                %3 echo $path
  222.                C:/bin
  223.  
  224.                And so on.  
  225.  
  226.  
  227.           Special variables              Special variables  
  228.  
  229.                There are a some shell variables that have special  meanings  for
  230.                                                               set                                the shell.   They can be given values with the set command.  They
  231.                are 
  232.  
  233.               NOCLOBBER                  NOCLOBBER  
  234.  
  235.                       NOCLOBBER                                                                      If NOCLOBBER is equal to '1', then existing files may not  be
  236.                    destroyed  by  output  redirection,  and  output  files to be
  237.                    appended to by >> must exist.  
  238.  
  239.  
  240.               PROMPT                  PROMPT  
  241.  
  242.                        PROMPT                                                                        The PROMPT environment string is handled the same way  as  it
  243.                           COMMAND COM                                                                is by  COMMAND.COM.    There  is one pc-shell-specific prompt
  244.                    string character  !    that  specifies  the  current  command
  245.                    index.   If no PROMPT environment string is defined, then the
  246.                    default is '$!% '.  
  247.  
  248.           NOGLOB              NOGLOB  
  249.  
  250.                    NOGLOB                                                                        The NOGLOB environment string, if set to '1', will suppress  file
  251.                name expansion.  
  252.  
  253.  
  254.           NODOS              NODOS  
  255.  
  256.                    NODOS                                                                          The NODOS  environment string, if set to '1', will keep the shell 
  257.                from   invoking   command.com   to  handle  commands  it  doesn't
  258.                understand.  
  259.  
  260.  
  261.  
  262.                                               -3-
  263.  
  264.  
  265.                PC-SHELL (1)             PC-DOS C Shell              PC-SHELL (1)
  266.  
  267.  
  268.           TEMP              TEMP  
  269.  
  270.                    TEMP                                                                          The TEMP environment, gives the directory in which to place  pipe
  271.                files.   This  can be a ram disk, or just someplace out of harm's
  272.                way.   This  variable  must  contain  a  trailing  slash,  if  it
  273.                specifies a subdirectory.  
  274.  
  275.  
  276.           Multiple commands on one command line              Multiple commands on one command line  
  277.  
  278.                Command lines  are  split at semicolons.  This can be defeated by
  279.                quoting or escaping.  
  280.  
  281.                EXAMPLE 
  282.  
  283.                %0 ls -l *.c ; make shell.exe ; exit
  284.  
  285.           Conditional command execution              Conditional command execution  
  286.  
  287.                If two commands are seperated by '&&', then the  second  will  be
  288.                executed only  if  the  first  returns 0 as an exit code.  If two
  289.                commands are seperated by '||', then the second will be  executed
  290.                only the first command returns non-zero as an exit code.  
  291.  
  292.                Example 
  293.  
  294.                    make shell.exe && chmod +w /bin/shell.exe && mv shell.exe /bin 
  295.  
  296.                    If  the  make operation fails, then the chmod and the mv will
  297.                    not be executed.  
  298.  
  299.                    make shell.exe || echo You blew it bub!
  300.  
  301.                    If the make operation fails, then the echo operation will  be
  302.                    executed.  
  303.  
  304.  
  305.           Character Escapes  Shell Comments  and Argument Quoting              Character Escapes, Shell Comments, and Argument Quoting  
  306.  
  307.                Any  character  preceded by a  \ (backslash) is copied unmodified
  308.                to the command buffer.  This allows you to suppress  the  special
  309.                meanings  of  shell  command characters, such as '|', ';', and '*
  310.                '.  
  311.  
  312.                # is the shell comment character.  Anything on a line after  a  #
  313.                character is ignored.  
  314.  
  315.                Command line arguments contained in quotes (single or double) may 
  316.                contain blank space (i.e. blanks or tabs).  Variable substitution 
  317.                will take  place  within strings surrounded by double quotes.  No
  318.                interpretation takes place within single quotes.   
  319.  
  320.                Within  double  quotes,  the  'C'   language   escape   sequences
  321.                \r,\n,\b,\f, and  \a are honored - i.e.  they are mapped to their
  322.                corresponding control characters.  
  323.  
  324.  
  325.           Startup and Script Files              Startup and Script Files  
  326.  
  327.  
  328.                                               -4-
  329.  
  330.  
  331.                PC-SHELL (1)             PC-DOS C Shell              PC-SHELL (1)
  332.  
  333.  
  334.                If '-s' is specified on the command line the  program  will  look
  335.                for  a file called SHELL.RC in the current directory, and execute
  336.                it before passing  control to the console.  This  allows  you  to
  337.                set up  all  your alias commands.  It isn't a good idea to put an
  338.                'exit'  command  in  your  SHELL.RC  file,  as  the  shell   will
  339.                terminate.  
  340.  
  341.                                                sh                                                Any file  whose  extension  is .sh is run as a command file.  The
  342.                environment string PATH is used to locate the script file  if  it
  343.                isn't in  the  current  directory.  .sp 1 There is also a command
  344.                sh                                                                                sh, into which shell scripts whose extension is not  .sh  can  be
  345.                redirected as standard input.  
  346.  
  347.                EXAMPLE
  348.  
  349.                %0 sh <batch.fil        # use the sh command
  350.                %1 shell <batch.fil     # run the external program
  351.  
  352.                                    bat                                                           Files  ending  in  .bat  files  are  passed  to  COMMAND.COM  for
  353.                execution.  
  354.  
  355.  
  356.           INPUT OUTPUT              INPUT/OUTPUT  
  357.  
  358.                                                          COMMAND COM                             I/O redirection operates as it does under COMMAND.COM  with  some
  359.                additional options: 
  360.  
  361.             name              <name 
  362.  
  363.                               name                                          Opens the file name as the standard input.  
  364.  
  365.              word              <<word 
  366.  
  367.                                                                            word                  reads  the  shell  input up to a line which is identical to word.
  368.                The resulting text is put into an anonymous temporary file, which 
  369.                is given to the command as standard input.  
  370.  
  371.                 name                 >name
  372.                  name                 >!name
  373.                  name                 >&name
  374.                   name                 >&!name
  375.  
  376.                             name                                                                     The file name  is used as standard output.    If  it  doesn't
  377.                    exist,  it's  created; if it exists, it is truncated, and its
  378.                    previous contents are lost.  
  379.  
  380.                                    NOCLOBBER                                                         If the variable NOCLOBBER is set, the file must  not  already
  381.                    exist, or  an  error results.  The forms using an exclamation
  382.                    point override the NOCLOBBER variable's action.  
  383.  
  384.                               name                                                                   The form >&name routes standard  error  along  with  standard
  385.                              name                        output to name.  
  386.  
  387.                  name                 >>name
  388.                   name                 >>!name
  389.                   name                 >>&name
  390.                    name                 >>&!name
  391.  
  392.  
  393.  
  394.                                               -5-
  395.  
  396.  
  397.                PC-SHELL (1)             PC-DOS C Shell              PC-SHELL (1)
  398.  
  399.  
  400.                                     name                                                             Uses  the  file  name  as standard output, like >, but places
  401.                                                                NOCLOBBER                              output at the end of file.  If the variable NOCLOBBER is set, 
  402.                    it is an error if the file doesn't already exist.  The  forms
  403.                    using  an exclamation point override the NOCLOBBER variable's
  404.                    action.  
  405.  
  406.  
  407.               BUILT IN COMMANDS                  BUILT-IN COMMANDS  
  408.  
  409.  
  410.                    Some of the internal commands are  UNIX*  style  replacements
  411.                    for  COMMAND.COM internal commands, and some are included for
  412.                    convenience.  
  413.  
  414.                        Output of the 'commands' command
  415.  
  416.                        a:              alias           b:              c:
  417.                        cat             cd              chdir           chmod
  418.                        cls             commands        copy            cp
  419.                        d:              del             dir             dump
  420.                        e:              echo            era             erase
  421.                        error           exit            f:              fgrep
  422.                        g:              h:              hd              history
  423.                        i:              j:              ls              md
  424.                        mkdir           mon             more            mv
  425.                        popd            pushd           pwd             rd
  426.                        read            rm              rmdir           set
  427.                        sh              switchar        tee             touch
  428.                        unalias         version         y
  429.  
  430.                    There are many that are simply aliases, e.g.  'copy' and 'cp' 
  431.                    invoke the same program.  
  432.  
  433.  
  434.               COMMAND DESCRIPTION SYNTAX                  COMMAND DESCRIPTION SYNTAX  
  435.  
  436.                    terms used in syntax explanations :
  437.                    
  438.                    fname ::= PC-DOS ambiguous or unambiguous file or directory name.
  439.                    
  440.                    uname ::= unambiguous PC-DOS file or directory name
  441.                    
  442.                    string ::= any string of printable characters of arbitrary(<512) length.
  443.                    
  444.                    filelist ::= filename [filename .. filename]
  445.                    
  446.                    noargs ::= no arguments at all
  447.                    
  448.                    space ::= any white space characters
  449.                    
  450.                    [arg] ::= term is optional
  451.                    
  452.                    envstring ::=    <string>=<string> | <string><space>=<space><string> |
  453.                 <string><space><string>
  454.  
  455.  
  456.               COMMANDS                  COMMANDS  
  457.  
  458.  
  459.  
  460.                                               -6-
  461.  
  462.  
  463.                PC-SHELL (1)             PC-DOS C Shell              PC-SHELL (1)
  464.  
  465.  
  466.                    drive                     drive
  467.  
  468.                        a: | b: | c: | d: | e: | f: | g: | h: | i: | j: <noargs> 
  469.  
  470.                        changes default drive.  If you don't have such  a  drive,
  471.                        nothing happens.  
  472.  
  473.                    alias                     alias
  474.  
  475.                        alias <envstring> 
  476.  
  477.                        assigns cmdstring  to name.  name can now be used just as
  478.                        if it were a built-in or external command.  cmdstring may 
  479.                        contain history expressions or variable substitutions.  
  480.  
  481.                        The syntax of this command is flexible - you can  specify
  482.                        alii  (?)  in  the form 'name=subst','name subst','name =
  483.                        subst', or  'name  =subst.'  However  you  need  a  space
  484.                                   before                                                                 character  before  a  single quote in order to specify an
  485.                        alias that contains blanks.  
  486.  
  487.                            alias     set                                                                 The alias and set commands  are  case  sensitive,  unlike
  488.                                         COMMAND COM                            their analogs in COMMAND.COM.  
  489.  
  490.                    cat                     cat
  491.  
  492.                        cat [<filelist>] 
  493.  
  494.                        copies specified  files  to standard output.  If none are
  495.                        given, copies standard input to standard output 
  496.  
  497.                    cp                     cp
  498.  
  499.                        cp | copy <filelist> <uname> 
  500.  
  501.                        copies specified files to destination file or device.  If 
  502.                        more than one file is in the file list, <uname> must be a 
  503.                        directory.  
  504.  
  505.                    cd                     cd
  506.  
  507.                        cd | chdir <dirname> 
  508.  
  509.                        makes <dirname> the current default directory.  
  510.  
  511.                    chmod                     chmod
  512.  
  513.                        chmod [-|+[arwhs]*] <filelist> 
  514.  
  515.                        change file permissions for specified files 
  516.  
  517.                        +r, -r turn on or off read permission - i.e. hide the file.
  518.                        +w, -w turn on or off write permission.
  519.                        +h, -h turn on or off hidden attribute - converse of r
  520.                        +a, -a turn on or off archive attribute
  521.                        +s, -s turns on or off the system attribute
  522.  
  523.                        Note that '-r'  or  '+rwh'  are  both  valid  syntax  for
  524.  
  525.  
  526.                                               -7-
  527.  
  528.  
  529.                PC-SHELL (1)             PC-DOS C Shell              PC-SHELL (1)
  530.  
  531.  
  532.                        switches.   Also  new permission switches are permissable
  533.                        between file names with the following  warning:  I  don't
  534.                        reset the masks between file names - if you have a second 
  535.                        batch  of  attribute  changes  on  the  command line, the
  536.                        effect is additive.  If you're  not  careful,  you  could
  537.                        make a mess of a files attributes.  
  538.  
  539.                        If   you  don't  specify  any  attribute  switches,  file
  540.                        attributes will be set to 0, which  means  read,write,not
  541.                        hidden,not system, not  modified since last backup.  
  542.  
  543.                    cls                     cls
  544.  
  545.                        cls <noargs> 
  546.  
  547.                        clears the screen and homes the cursor.  
  548.  
  549.                    commands                     commands
  550.  
  551.                        commands <noargs> 
  552.  
  553.                        prints a  table  of  available  built-in  commands.  (see
  554.                        above) 
  555.  
  556.                    del                     del
  557.  
  558.                        del 
  559.  
  560.                        synonym for rm.  
  561.  
  562.                    dir                     dir
  563.  
  564.                        dir 
  565.  
  566.                        synonym for ls.  
  567.  
  568.                    dirs                     dirs
  569.  
  570.                        dirs <noargs> 
  571.  
  572.                        lists the directories on the directory stack.  (see pushd 
  573.                        and popd) 
  574.  
  575.                    du                     du
  576.  
  577.                        du [drivename] 
  578.  
  579.                                                             drivename                                    prints out remaining space on drive  drivename.   If  you
  580.                        leave  off  the  drivename,  it  defaults  to the current
  581.                        drive.  
  582.  
  583.                    dump                     dump
  584.  
  585.  
  586.                        dump filespec [block [page]] | [segment:[offset]] [count] 
  587.  
  588.                        Where a block is 64K bytes and a page is 256 bytes
  589.                        Segment:offset are standard 8086 notation in hexadecimal
  590.  
  591.  
  592.                                               -8-
  593.  
  594.  
  595.                PC-SHELL (1)             PC-DOS C Shell              PC-SHELL (1)
  596.  
  597.  
  598.                        Count is the number of bytes to dump in decimal
  599.  
  600.                        This came from some anonymous public domain source, ported by me
  601.  
  602.                    echo                     echo
  603.  
  604.                        echo <anything> 
  605.  
  606.                                                            echo  on                                      echos argument list  to  screen.    echo  on  causes  all
  607.                        commands  to  be  echoed  before execution (i.e. sets the
  608.                                         echo off                                                       verbose  flag).  echo off turns off the verbose flag.  
  609.  
  610.                    era                     era
  611.  
  612.                        era 
  613.  
  614.                        synonym for rm.  
  615.  
  616.                    error                     error
  617.  
  618.                        error <noargs> 
  619.  
  620.                        prints returned value of last command to the screen.  
  621.  
  622.                    exit                     exit
  623.  
  624.                        exit <noargs> 
  625.  
  626.                        terminates execution of the currently running  sub-shell.
  627.                        If  you are at top level of execution, you will return to
  628.                        dos.  
  629.  
  630.                    fgrep                     fgrep
  631.  
  632.                        fgrep <pattern> <filelist> 
  633.  
  634.                        looks for unambiguous pattern  <pattern>  in  <filelist>.
  635.                        echos lines matching to the screen.  
  636.  
  637.                    history                     history
  638.  
  639.                        history [size] 
  640.  
  641.                                                                          size                            prints history  list  to  standard  output.    If size is
  642.                        given, the number of commands history remembers is set to 
  643.                        size                                                                              size.  If you change  the  size,  history  'forgets'  all
  644.                        previous commands and resets its counters to 0.  
  645.  
  646.                    ls                     ls
  647.  
  648.                        ls | dir [-[alqctrR]] <filelist> 
  649.  
  650.                        Lists files that match <filelist> 
  651.  
  652.                        -a all files, including system files are listed.  '.' and 
  653.                        '..'  are  suppressed,  but you know they're there if you
  654.                        need them, don't you?  
  655.                        -l prints out file times, permissions, etc 
  656.  
  657.  
  658.                                               -9-
  659.  
  660.  
  661.                PC-SHELL (1)             PC-DOS C Shell              PC-SHELL (1)
  662.  
  663.  
  664.                        -q suppresses header line from display - useful when  you
  665.                        want to pipe stuff into another program.  
  666.                        -c print as one column.  
  667.                        -t sort by time, most recent last 
  668.                        -R recurse through all encountered subdirectories.  
  669.                        -r reverses sort order.  
  670.  
  671.                    md                     md
  672.  
  673.                        md | mkdir <uname> 
  674.  
  675.                        make a directory.  Prints an error if it can't be done 
  676.  
  677.                    mon                     mon
  678.  
  679.                        mon <noargs> 
  680.  
  681.                        mon                                                                                mon prints to standard error a lot of cryptic information 
  682.                        on system variables thusly: 
  683.  
  684.                            Corg : 0000 Cend : 715a Dorg : 0002 Dend 167a
  685.                            Uorg : 167a Uend : 327a mbot : 427c mtop 4800
  686.                            sbot : 0000 PSP  : 490d STKSIZ : 00256 HEAPSIZ : 00064
  687.                            dsval : 5033 csval : 491d
  688.                            STKLOW : 0001 MEMRY : 4680
  689.                            CS : 491d DS : 5033 SP : 4186
  690.  
  691.                        You  can  probably  figure out what most of the variables
  692.                        mean.  If you have source and have broken the shell, this 
  693.                        command may help.  
  694.  
  695.                    more                     more
  696.  
  697.                        more [-[0-9]*] [<filelist>] 
  698.  
  699.                        List file to screen with pauses 
  700.  
  701.                        -n specify tab width when expanding tabs, where n  is  an
  702.                        integer.   more acts like 'cat' when redirected - you can
  703.                        concatenate files in  this  manner.    If  no  files  are
  704.                        specifed, standard input is 'mored.' 
  705.  
  706.                    mv                     mv
  707.  
  708.                        mv [-v] <filelist> <uname> 
  709.  
  710.                        moves  specified  file  or  files  to  target specifed by
  711.                        <uname>.  If there is more than one file in list, <uname> 
  712.                        must be a directory 
  713.  
  714.                         v                                                                                -v  will  print  out  a  message   saying   how   it   is
  715.                        accomplishing   the   move,   which   is   probably  more
  716.                        interesting to me than you.  
  717.  
  718.                    popd                     popd
  719.  
  720.                        popd <noargs> 
  721.  
  722.  
  723.  
  724.                                              -10-
  725.  
  726.  
  727.                PC-SHELL (1)             PC-DOS C Shell              PC-SHELL (1)
  728.  
  729.  
  730.                        returns to directory at top of directory stack.  
  731.  
  732.                    pushd                     pushd
  733.  
  734.                        pushd [<uname>] 
  735.  
  736.                        save current working directory on  directory  stack,  and
  737.                        changes current working directory to <uname>.  
  738.  
  739.                        If  no <uname> is given, the current directory is swapped
  740.                        with the top of the directory stack.  
  741.  
  742.                    pwd                     pwd
  743.  
  744.                        pwd 
  745.  
  746.                        prints current working directory to standard output.  
  747.  
  748.                    read                     read
  749.  
  750.                        read vname0 [vname1 .. vnamen] 
  751.  
  752.                        read                                                                              read reads a line from standard input, and  assigns  each
  753.                        word  from  the  line  to  the  corresponding environment
  754.                                               vname0          vnamen                            variable specified by  vname0  through vnamen.  
  755.  
  756.                        EXAMPLE 
  757.  
  758.                            read a b    # read into environment variables a and b
  759.                        you type
  760.                            hello there
  761.                            echo $a
  762.                        the shell echos
  763.                            hello
  764.                            echo $b
  765.                        there
  766.  
  767.                        If there are fewer environment variables specified on the 
  768.                        command line than there are words in  the  command  line,
  769.                        the  last  environment  variable will contain the rest of
  770.                        the words on the line.  
  771.  
  772.                        EXAMPLE 
  773.  
  774.                            read a b    # read into environment variables a and b
  775.                        you type
  776.                            hello there Mister Jones
  777.                            echo $a
  778.                        the shell echos
  779.                            hello
  780.                            echo $b
  781.                        there Mister Jones
  782.  
  783.                        If there are more environment variables  on  the  command
  784.                        line than words on the line read from standard input, the 
  785.                        left-over  environment variables' state will not change -
  786.                        if they were defined in the  environment  already,  their
  787.                        status  won't  change,  and if they weren't defined, they
  788.  
  789.  
  790.                                              -11-
  791.  
  792.  
  793.                PC-SHELL (1)             PC-DOS C Shell              PC-SHELL (1)
  794.  
  795.  
  796.                        stay undefined.  
  797.  
  798.                    rd                     rd
  799.  
  800.                        rd | rmdir <uname> 
  801.  
  802.                        remove specified directory if possible.  
  803.  
  804.                    rm                     rm
  805.  
  806.                        rm [-q] <filelist> 
  807.  
  808.                        blows away all files in <filelist>. If -q  is  specified,
  809.                        will ask if they should be removed.  
  810.  
  811.                    set                     set
  812.  
  813.                        set [<envstring>] 
  814.  
  815.                        sets a string in the environment.  If you specify 'name=' 
  816.                        with  no  string  after,  it  will  remove  it  from  the
  817.                        environment.  If you don't specify a string,  set  prints
  818.                        out current environment.  
  819.  
  820.                        The  syntax of this command is flexible - you can specify
  821.                        set in the form 'set  name=subst','set  name  subst','set
  822.                        name  =  subst', or 'set name =subst.' However you need a
  823.                                        before                                                             space character before a single quote in order to specify 
  824.                        a substitution string that contains blanks.  
  825.  
  826.                    sh                     sh
  827.  
  828.                        sh [ <arg1> .. <argn>] <scriptfile 
  829.  
  830.                        forks a  'local'  shell  -  i.e.    saves  all  pertinent
  831.                        information  about  the  shell  you're  currently  in and
  832.                        invokes the command processor function recursively,  with
  833.                        scriptfile                                                                        scriptfile as  input.    The  arguments  are copied to $1
  834.                        through $N environment strings, overwriting  the  startup
  835.                        arguments.  
  836.  
  837.                        sh                                                                                sh  gives  you  a  way to run scripts, without loading an
  838.                        extra copy of shell.com or small.com.  
  839.  
  840.                    switchar                     switchar
  841.  
  842.                        switchar [schar] 
  843.  
  844.                                                         schar      schar                                 sets the DOS switch character to schar.  If schar is  not
  845.                        given, the current switch character is echoed.  
  846.  
  847.                    tee                     tee
  848.  
  849.                        tee <uname> 
  850.  
  851.                        Copies  standard  input  to standard output, depositing a
  852.                        copy in <uname> 
  853.  
  854.  
  855.  
  856.                                              -12-
  857.  
  858.  
  859.                PC-SHELL (1)             PC-DOS C Shell              PC-SHELL (1)
  860.  
  861.  
  862.                    touch                     touch
  863.  
  864.                        touch <filelist> 
  865.  
  866.                        Makes  the  modification  time  of  specified  files  the
  867.                        current date and time.  
  868.  
  869.                    unalias                     unalias
  870.  
  871.                        unalias aliasname 
  872.  
  873.                        remove alias name from the alias list.  
  874.  
  875.                    y                     y
  876.  
  877.                        y <filelist> 
  878.  
  879.                        copies standard input to standard output, and then copies 
  880.                        the specified  files  to  standard  output.   Sort of the
  881.                        opposite of tee, in other words.  
  882.  
  883.  
  884.               Helpful hints                  Helpful hints  
  885.  
  886.  
  887.                    Use forward slashes in all path names.  (See  note  below  on
  888.                    switch  characters)    If  you  use  DOS  3.0 or higher, this
  889.                    includes paths to transient programs.  
  890.  
  891.                    put single quotes around arguments with semicolons  in  them,
  892.                    so they don't turn into command delimiters.  
  893.  
  894.                    The  set  command affects only the local shell's environment.
  895.                    You can 'exit' to command.com and the original environment is 
  896.                    intact.  The  local  environment  is  2K  large  -  which  is
  897.                    useful.  
  898.  
  899.                    When  using  the  Microsoft  C  compiler  under pc-shell, the
  900.                    compiler has a bad habit of  look  for  parameters  beginning
  901.                    with forward  slashes  in  the environment.  If you get their
  902.                    famous  'P0  :  bad  option'  message,   try   revising   the
  903.                    environment.  
  904.  
  905.                    Anything  compiled  with  Microsoft  C  3.0  that  uses their
  906.                    system, exec, and spawn functions will complain about forward 
  907.                    slashes.  Use the -b option.  
  908.  
  909.                    Sidekick  has  obnoxious  ideas  about  when  it  should  and
  910.                    shouldn't pop  up.    From  the shell prompt you have to type
  911.                    <HOT-KEY><RETURN> to get it to wake up.   The  <RETURN>  gets
  912.                    passed back to  the  shell.  Why?  Talk to Borland. I use DOS
  913.                    function 3F (read from file or device) to get keys,  and  you
  914.                    can't get any more vanilla than that.  
  915.  
  916.  
  917.               Implementation notes                  Implementation notes  
  918.  
  919.  
  920.  
  921.  
  922.                                              -13-
  923.  
  924.  
  925.                PC-SHELL (1)             PC-DOS C Shell              PC-SHELL (1)
  926.  
  927.  
  928.                    DOS  doesn't  acknowledge  a  'change  default drive' command
  929.                    until you issue a 'get current directory' call.   Why?    The
  930.                    only way I figured this out is by disassembling command.com.  
  931.  
  932.                    PC|MS-DOS has  a  limit  of  20  file  handles.  If you add a
  933.                    command that opens files, make sure you catch the  ctrl-break
  934.                    signal and close them.  Look at CAT.C or Y.C for examples.  
  935.  
  936.                    DON'T  REDIRECT  INPUT  INTO  PRINT. Print gets all hosed up.
  937.                    Print has lots of trouble in general with the  pc-shell,  and
  938.                    should be avoided.  
  939.  
  940.               BUGS                  BUGS  
  941.  
  942.  
  943.                    Due  to  the way that environment strings are expanded on the
  944.                    command line, semicolons inside  shell  variables  look  like
  945.                    command seperators.    If  you enclose them in double quotes,
  946.                    the problem will go away.  
  947.  
  948.                    I have noticed intermittent problems running on an  AT,  with
  949.                    DOS  3.0,  but  have been unable to reproduce them on a PC. I
  950.                    suspect bugs in DOS 3.0 that are absent in 3.1. If you notice 
  951.                    any consistent problems, send  me a bug report.  
  952.  
  953.               HISTORY                  HISTORY  
  954.  
  955.  
  956.  
  957.                   V 2 0                      V 2.0  
  958.  
  959.                        Minor bug fixes.  Started allocating command buffers  out
  960.                        of heap rather than stack, reducing stack usage.  Stopped 
  961.                        releasing source with executables.  
  962.  
  963.                   V 2 1                      V 2.1  
  964.  
  965.                        Fixed the bug that made "mv foo .." throw away the source 
  966.                        file and  move  it to "..foo", (i.e. nowhere).  Added the
  967.                        sh command,  that  allows  you  to  run  scripts  without
  968.                        re-invoking the shell.  
  969.  
  970.                   V 2 2                      V 2.2  
  971.  
  972.                        Fixed  the bug that locked pc up when a command line with
  973.                        a leading ; was entered.  Changed fork code so that files 
  974.                        with the extension .sh are run as scripts.    The  equals
  975.                        sign in alias and set is now optional.  
  976.  
  977.                   V 2 3                      V 2.3  
  978.  
  979.                        Removed  information  about versions 1.0 through 1.6 from
  980.                        documentation, adding any relevant material to  the  tips
  981.                        or implementation  notes sections.   Added redirection of
  982.                        standard error, and checking for  NOCLOBBER.  Implemented
  983.                        execution of the prompt string.  
  984.  
  985.  
  986.  
  987.  
  988.                                              -14-
  989.  
  990.  
  991.                PC-SHELL (1)             PC-DOS C Shell              PC-SHELL (1)
  992.  
  993.  
  994.                   V 2 4                      V 2.4  
  995.  
  996.                        The  problem running external programs written by IBM and
  997.                        Microsoft  has  finally  been  traced  to  Aztecs  fexecv
  998.                        function.   When  is  an  ASCIIZ  string  not  an  ASCIIZ
  999.                        string?  When you need to put a single carriage return on 
  1000.                        the end of it.  THANKS to Programmers Journal. NOTE  WELL
  1001.                        that  needing  a carriage return in your command tail for
  1002.                        EXEC calls is note documented in the IBM PC-DOS technical 
  1003.                        reference.  
  1004.  
  1005.                        All references to the  Aztec  screen  library  have  been
  1006.                        removed,  so  this  should  work  on Rainbows, Compupros,
  1007.                        AMPROs etc.  etc.  etc.  ls is slower, but  its  a  small
  1008.                        price to  pay.    If  you want a fast version, one can be
  1009.                        created for you if you mail a contribution (hint,hint).  
  1010.  
  1011.                        mv now will do the right thing when you try to move to  a
  1012.                        drive  that  has been joined to a directory (DOS 3.1). It
  1013.                        also now has a  verbose  switch,  which  tells  you  what
  1014.                        exactly its doing.  When I started writing a mv, I had no 
  1015.                        idea  how  many  special  cases I would have to take care
  1016.                        of.  
  1017.  
  1018.                   V 2 5                      V 2.5  
  1019.  
  1020.                        Problem with using the wrong path to search for  external
  1021.                        programs solved.    Main  command line parsing changed so
  1022.                        that  NOGLOB  could  be  used  to  suppress   file   name
  1023.                        expansion.  
  1024.  
  1025.                   V 2 6                      V 2.6  
  1026.  
  1027.                        Many stupid  bugs  in 2.5 are addressed (sorry folks).  I
  1028.                        now peek inside double quotes to do  variable  expansion.
  1029.                        Double quotes are now stripped.  
  1030.  
  1031.                   V 2 7                      V 2.7  
  1032.  
  1033.                        Added read.    Fixed  bug  in  ls that would occasionally
  1034.                        leave you in a different directory.    The  exit  command
  1035.                        will  now  just  pop  you out a level of shell execution,
  1036.                        rather than kicking you out to the DOS prompt.  
  1037.  
  1038.                   V 2 8                      V 2.8  
  1039.  
  1040.                        Fixed bug  in  more  that  made  it  puke  when  you  hit
  1041.                        <CTRL>-<BREAK> at the bottom of a screen-full.  Made move 
  1042.                        and  cp  preserve  file  times when they have to create a
  1043.                        target.  
  1044.  
  1045.                   V 2 9                      V 2.9  
  1046.  
  1047.                        Fixed bug in ls that caused it to get confused  when  you
  1048.                        did an  'ls  -R'  on  a  drive other than default.  Also,
  1049.                        stopped it from hanging on an empty pipe.  Added the 'du' 
  1050.                        command - which is simply the last line of ls  -l.  Shell
  1051.                        scripts will now be searched for on PATH.  
  1052.  
  1053.  
  1054.                                              -15-
  1055.  
  1056.  
  1057.                PC-SHELL (1)             PC-DOS C Shell              PC-SHELL (1)
  1058.  
  1059.  
  1060.                   V 3 0                      V 3.0  
  1061.  
  1062.                        Bug  fixed  : when you switched to a disk for which there
  1063.                        was no /tmp directory, the shell couldn't open  its  pipe
  1064.                        files.    Now  pipe  files  are  opened  in  the  default
  1065.                        directory.  If you have a better idea, let me know.  
  1066.  
  1067.                        Added a critical error handler - if you  get  the  abort,
  1068.                        retry, ignore message and abort, you return to the shell, 
  1069.                        rather than  to  DOS.  It is possible that all the memory
  1070.                        allocated during the execution of the  offending  command
  1071.                        may  not  be freed, in which case the shell could run out
  1072.                        of memory.  Just give it the exit command  and  re-invoke
  1073.                        if that happens.  
  1074.  
  1075.                        If  you  type something that the shell can't interpret as
  1076.                        an internal command, run as  an  external  program  or  a
  1077.                        script, I  give  command.com  a  crack  at  it.   You can
  1078.                        therefore now run dos batch files  transparently.    This
  1079.                        slows  things  down  somewhat  if  you type totally bogus
  1080.                        commands, so this feature can be  turned  off  with  "set
  1081.                        NODOS=1".  
  1082.  
  1083.                   V 3 1                      V 3.1  
  1084.  
  1085.                        Some general  cleanup.    Added  a function that makes an
  1086.                        absolute path from any relative path,  which  cleaned  up
  1087.                        mv, ls, and cp quite a bit.  
  1088.  
  1089.                        Went back  to  .com  format for pc-shell and small.  This
  1090.                        makes the archive file about 1K smaller on average.  
  1091.  
  1092.                   V 3 2                      V 3.2  
  1093.  
  1094.                               b                                                                          Added -b option in hopes of being  more  compatible  with
  1095.                        recalcitrant   software  (like  PC-NET)  that  chokes  on
  1096.                        forward slashes in paths.  It should be  noted  that  DOS
  1097.                        2.XX  versions  don't  like  forward  slashes in the PATH
  1098.                        environment string.  
  1099.  
  1100.                        Stopped closing standard handles  3  and  4  on  startup.
  1101.                        This  should  make  weird  things  like  Wordstar printer
  1102.                        output being redirected to the screen go away.  
  1103.  
  1104.                        Single or double quotes around redirected file names  are
  1105.                        now permitted.  
  1106.  
  1107.                   V 3 3                      V 3.3  
  1108.  
  1109.                                                b                                                         Refined behavior   of  -b  option.    Fixed  aliasing  in
  1110.                        compound commands.  Deleted small.com  from  distribution
  1111.                        package because of lack of interest.  Fixed bug in add to 
  1112.                        environment  function, that made parts of the environment
  1113.                        disappear.  Made sidekick work slightly better.  Mv  will
  1114.                        now work on directories under DOS V 3.0 or later.  
  1115.  
  1116.                   V 3 4                      V 3.4  
  1117.  
  1118.  
  1119.  
  1120.                                              -16-
  1121.  
  1122.  
  1123.                PC-SHELL (1)             PC-DOS C Shell              PC-SHELL (1)
  1124.  
  1125.  
  1126.                        Added  logic  to  use  the TEMP environment string to put
  1127.                        pipe files someplace useful.  
  1128.  
  1129.                   V 3 5                      V 3.5  
  1130.  
  1131.                        Tuning and linting.  Added pushd with no arguments.  
  1132.  
  1133.                   LICENCING STATEMENT                      LICENCING STATEMENT  
  1134.  
  1135.                        PC-SHELL is not in the public domain.  I, Kent  Williams,
  1136.                        retain   all   rights   of   ownership  over  source  and
  1137.                        executables, unless I explicitly transfer such rights  to
  1138.                        someone else.  
  1139.  
  1140.                        All  persons  who  come into possesion of PC-SHELL in the
  1141.                        binary-only version are entitled to use it  however  they
  1142.                        wish.  No  warranty is given or implied.  All persons who
  1143.                        come into possesion of  PC-SHELL  are  also  entitled  to
  1144.                        redistribute   the  package  in  any  way  they  see  fit
  1145.                        providing that 
  1146.  
  1147.                             1) The package is distributed intact.    This  means
  1148.                             that  the  archive  file  or  distribution  diskette
  1149.                             contains PC-SHELL.COM, SMALL.COM and SHELL.DOC,  and
  1150.                             that  no  changes  have  been  made  to any of these
  1151.                             files.  
  1152.  
  1153.                             2) That no charge is made, beyond a nominal fee  for
  1154.                             media duplication.  
  1155.  
  1156.                        The   above   three   paragraphs  constitute  an  limited
  1157.                        non-commercial licence to PC-SHELL binaries to anyone who 
  1158.                        obtains it.   This  distiguishes  it  from  being  public
  1159.                        domain  only  in  that I retain enough control over it to
  1160.                        protect my own interests.  (Take heart, hackers!) 
  1161.  
  1162.                        All person who obtain copies of source code  are  granted
  1163.                        unlimited noncommercial  use  thereof.   This source code
  1164.                        licence is not transferrable to any other party, for  any
  1165.                        reason.  
  1166.  
  1167.                        In addition, no modified versions of the program PC-SHELL 
  1168.                        may   be  distributed  by  commercial  or  non-commercial
  1169.                        means.  
  1170.  
  1171.                        Any company  wishing  to  purchase  source  licenses  are
  1172.                        subject to these further restrictions.  
  1173.  
  1174.                             1)  That  no part of the source code is used, in any
  1175.                             form in any program sold commercially.  
  1176.  
  1177.                             2) That a licence fee will be  paid  for  each  user
  1178.                             within  a company of PC-SHELL, according to the rate
  1179.                        schedule below.  
  1180.  
  1181.                   PRICING                      PRICING  
  1182.  
  1183.                        Noncommercial Personal Use - 25.00$
  1184.  
  1185.  
  1186.                                              -17-
  1187.  
  1188.  
  1189.                PC-SHELL (1)             PC-DOS C Shell              PC-SHELL (1)
  1190.  
  1191.  
  1192.                        Commercial User    - 25.00$, plus 15.00$ per each additional user.
  1193.                        Commercial Distribution - by written agreement only
  1194.  
  1195.                             For the above prices you will receive: 
  1196.  
  1197.                             1) Complete source code for shell, with makefile 
  1198.                             2) Source and executable for the text formatter used 
  1199.                             to prepare this documentation.  NOTE: I didn't write 
  1200.                             this program, and am distributing it  as  a  service
  1201.                             only.  
  1202.  
  1203.                             3) Executable and documentation for NDMAKE, the best 
  1204.                             make  available for love or money on PC-DOS. This is
  1205.                             distributed as a service only.    Please  honor  the
  1206.                             author's request for donations.  
  1207.  
  1208.                             4)  Source  for as many other Unix Utilities as will
  1209.                             fit on the disk.  Currently I am distributing  grep,
  1210.                             calls, fgrep,  cut,  paste,  tail, ctags.  I did not
  1211.                             write these programs, and am distributing them as  a
  1212.                             service only.  
  1213.  
  1214.                             As  always, miscellaneous contributions are welcome.
  1215.                             As anyone who has contacted  me  is  aware,  I  will
  1216.                             provide  as  much  help  as  I  can, in fixing bugs,
  1217.                             providing   updates,   taking   suggestions,   etc.,
  1218.                             regardless of monetary arrangements.  
  1219.  
  1220.                             QUESTIONS COMMENTS BUGREPORTS GOTO 
  1221.                             KENT WILLIAMS
  1222.                             722 Rundell St.
  1223.                             Iowa City, IA 52240
  1224.                             (319) 338-6053 (HOME VOICE)
  1225.                             
  1226.                             * UNIX is an unregistered trademark of AT&T.
  1227.  
  1228.  
  1229.  
  1230.  
  1231.  
  1232.  
  1233.  
  1234.  
  1235.  
  1236.  
  1237.  
  1238.  
  1239.  
  1240.  
  1241.  
  1242.  
  1243.  
  1244.  
  1245.  
  1246.  
  1247.  
  1248.  
  1249.  
  1250.  
  1251.  
  1252.                                              -18-
  1253.  
  1254.